For many enterprise applications, finite resources must be allocated among a number of requests for such resources. Resource allocation systems typically attempt to balance the work load among resources that are available at the time the resource allocation request is received. In a packet network environment, for example, in order to facilitate a media session between users, one of many available suitable resources must be selected. For example, a resource allocation system may be required to allocate hardware resources required by the media session, such as audio/video conference servers, announcement servers, Interactive Voice Response (IVR) systems, media gateways and allocating a Network Attached Storage (NAS) driver in a storage application.
Existing resource allocation systems typically select one of multiple qualified resources either arbitrarily or based on a known available capacity. For example, a number of resource allocation systems are based on manually configured hierarchical static resource groupings. Such existing resource allocation systems, however, are insensitive to the current state of the network, such as the session quality and network load. In a multi-resource environment, a media resource must be selected such that the selected resource is capable of satisfactorily performing the desired service and can also sustain the desired session quality. A need therefore exists for methods and apparatus for allocating resources in a distributed environment that dynamically react to changing network conditions. A further need exists for methods and apparatus for allocating resources in a distributed environment that allocate resources based on a topological proximity within the network of the requester to the requested resource.